사이트 내 전체검색
open_basedir 설정하여 PHP 보안 강화 곰팡네나는 도서관/공부-서버-돌겠따2009/04/24 18:05
로빈아빠
https://cmd.kr/server/655 URL이 복사되었습니다.

본문

open_basedir 설정하여 PHP 보안 강화곰팡네나는 도서관/공부-서버-돌겠따2009/04/24 18:05
아직까지도 내부보안에 매우 약한 모습을 보이는 PHP이기에 PHPer로써 항상 이런 문제에 신경을 쓰게 마련입니다. 그중 항상 설치중 간과하기 쉬운 php.ini 옵션중의 하나인 open_basedir에 대해서 짚고 넘어가고자(까먹기 전에~ 에헤라 디야~!) 끄적거려 봅니다.

사실 PHP를 호스팅하는 입장에서는 내부 보안이 매우 신경쓰이게 됩니다. fopen이라던지, include 라던지 gzopen() 함수 등 내부적으로 매우 위험한 함수들이 많습니다. 게다가 이런 함수들을 disable_functions에 등록시켜 놓아 버리면 웹어플리케이션들이 모두 꽥~ 소리도 못내고 잠적들을 하시게 됩니다.(에러메세지라도 내보이게 해놓으면 다행~)

그냥 혼자서 사용하는 서버라면 신경안써도 되겠지만, 그렇지 못한 경우에는 어쩔 수 없이 fopen , fread 등등 많은 부분을 허용해야 하는 경우가 생깁니다. 서비스냐 보안이냐라는 문제가 나오게 되는 것이죠. 주로 include 는 include_path와 더불어 세팅하게 되고, 여기서 언급하게 되는 open_basedir은 fopen, fread 등의 위험한 함수들을 조금이나마 안전하게 사용할 수 있습니다.

open_basedir을 설정하시게 되면 해당하는 디렉토리 및 하위 디렉토리에서만 파일을 열 수 있도록 제한됩니다. 안전모드와는 관계없이 사용가능하며, 심볼릭 링크도 영향을 받습니다. 즉 심볼릭 링크를 걸어 지정된 디렉토리외의 파일을 가져올 수도 없다는 의미입니다. 그리고 php.ini 가 아닌 httpd.conf 에서 php_admin_value 옵션으로 끄거나 설정할 수 있습니다. ini_set()을 이용하시면 범위를 더 강화(실질적으로 사용가능한 디렉토리를 좀더 제한한다는 의미)할 수도 있습니다.

PHP사이트의 매뉴얼中 ... http://php.benscom.com/manual/kr/ini.sect.safe-mode.php 


★ 설정법

php.ini 옵션에서 찾아서 설정만 하시면 됩니다. 하나의 디렉토리 또는 다수의 디렉토리를 설정하실 수 있으며, 윈도우즈 OS에서는 각각의 디렉토리를 ;(세미콜론)으로 구분하며, 그외 유닉스 계열에서는 :(콜론)으로 구분합니다.

사용예) open_basedir = "d:/WebRoot;d/:/Temp;d:/TempSession/"

조심해야 할 점은 디렉토리명이 /(슬래시)로 끝나지 않을 경우 prefix(앞첨자)로 인식된다는 점입니다. 즉 /WebRoot 라고 지정하였을 경우 /WebRootAdmin , /WebRootArial 등도 해당된다는 것입니다. 특정 디렉토리(하위 디렉토리 포함)만 특정지을 경우에는 반드시 /(슬래시)로 끝나도록 지정하셔야 합니다.

다수의 웹호스팅 또는 보안을 강화하기 위한 옵션으로 open_basedir 설정 및 disable_functions, include_path 등을 이용하시면 적절한 PHP 내부 보안을 유지할 수 있을 것입니다.


-------------------------------------------

PHP 기본값은 open_basedir 처리 안되어 있기때문에 웹에서 
타 계정 절대경로로 호출 할 수 있죠 (보안 허술) 

<-- httpd.conf --> 
생략 
User apache 
Group apache 
생략 
<-- End --> 

abc 라는 계정이 있다면 (\ 한줄) 

예제) 
NameVirtualHost * 

<VirtualHost *> 
ServerAdmin webmaster@domain.com 
DocumentRoot /home/abc/www 
ServerName domain.com 
ErrorLog /home/abc/logs/domain.com-error_log 
CustomLog /home/abc/logs/domain.com-access_log \ 
combined 
php_admin_value open_basedir /home/abc:\ 
/tmp:/var/tmp:/var/lib/php:/dev/shm 
php_flag short_open_tag on 
php_flag register_globals on 
# Turn spelling support off \ 
(which would break URL shortcuts) 
<IfModule mod_speling.c> 
CheckSpelling Off 
</IfModule> 
</VirtualHost> 
--------------------------------------------------------- 
# chmod 701 /home/abc 
# chmod 710 /home/abc/www 
# chown abc.apache /home/abc/www 
--------------------------------------------------------- 
open_basedir 허용 디렉토리만 접근 가능 

php_flag short_open_tag on 
php_flag register_globals on 
off 상태에서 사이트를 개발해야 하는데 그렇치 않은 소스가 
많기 때문에 특정 유저를 on 으로 하시던가 아니면 
.htaccess 로 조절 

그 외 Safe Mode 도 신경 쓰셔야 할 겁니다. 

PS. SELinux 사용 하신다면 chcon 명령어로 해당 디렉토리 
접근 할 수 있도록 해 주셔야 할 겁니다.

댓글목록

등록된 댓글이 없습니다.

1,139 (4/23P)

Search

Copyright © Cmd 명령어 3.140.188.157